package com.xuge.controller;

import com.xuge.common.exception.EException;
import com.xuge.common.jwt.JWTUtils;
import com.xuge.pojo.UserInfoEntity;
import com.xuge.service.LoginUserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/api/login")
public class LoginUserController {
//    private static ArrayBlockingQueue queue = new ArrayBlockingQueue(5);
//    @PostConstruct
//    public void testQueue(){
//        new Thread(() -> {
//            while (true) {
//                System.out.println("扫描队列开始,队列长度:"+queue.size());
//                try {
//                    Object take = queue.take();
//                    Thread.sleep(1000);
//                    System.out.println("-----" + take);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        }).start();
//    }
//
//    @GetMapping("/queue")
//    public String testQueue(String s){
//        new Thread(()->{
//            for (int i = 0; i <8 ; i++) {
//                try {
//                    queue.put(s+"----"+i);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        }).start();
//        return "success";
//    }

    @Autowired
    private LoginUserService loginUserService;

    @Autowired
    private JWTUtils jwtUtils;

    @PostMapping("/login")
    private Object login(@RequestBody UserInfoEntity  userInfoEntity){
        Map<String,String> map = new HashMap<>();
        //查询 判断 正确获取token
        if (userInfoEntity==null){
            map.put("message","parameter error");
            return map;
        }
        if (StringUtils.isBlank(userInfoEntity.getName())&&StringUtils.isBlank(userInfoEntity.getPassword())){
            map.put("message","userName or password is not null");
            return map;
        }
        UserInfoEntity findUser = loginUserService.findUserByUserName(userInfoEntity.getName());
        if (findUser==null){
            map.put("message","userName is not exist");
            return map;
        }
        if (StringUtils.equals(userInfoEntity.getPassword(),findUser.getPassword())){
            //登录成功
            String token = jwtUtils.createToken(findUser);
            map.put("token",token);
            map.put("message","success");
            return map;
        }else{
            map.put("message","password is error");
            return map;
        }
    }

    @PostMapping("/test")
    public String test(){
        return "test";
    }

    @Autowired
    private RedisTemplate redisTemplate;
    @GetMapping("/test2")
    public String test2(){
        Object o = redisTemplate.opsForValue().get("1");
        System.out.println(o);
        throw new EException("出错了",500);
    }
}
//用户登录成功  会生成一个token 有一个设置时间 下一次用户访问 解析token 正确 更新时间